using OracleInternal.Json.Common;

namespace OracleInternal.Json.Sql
{
	internal class OracleJsonValue : IOracleJsonValue
	{
		internal OracleJsonType m_type = OracleJsonType.NULL;

		internal string m_str;

		internal static OracleJsonValue NULL = new OracleJsonValue();

		internal static OracleJsonValue TRUE = new OracleJsonValue(OracleJsonType.TRUE, "true");

		internal static OracleJsonValue FALSE = new OracleJsonValue(OracleJsonType.FALSE, "false");

		public virtual OracleJsonType GetOracleJsonType()
		{
			return m_type;
		}

		public virtual string ToJsonString()
		{
			return string.Empty;
		}

		internal OracleJsonValue()
		{
			m_type = OracleJsonType.NULL;
			m_str = "null";
		}

		internal OracleJsonValue(OracleJsonType jsonType, string jsonValue)
		{
			m_type = jsonType;
			m_str = jsonValue;
		}

		public IOracleJsonObject AsJsonObject()
		{
			return (IOracleJsonObject)this;
		}

		public IOracleJsonArray AsJsonArray()
		{
			return (IOracleJsonArray)this;
		}

		public OracleJsonString AsJsonString()
		{
			return (OracleJsonString)this;
		}

		public OracleJsonDecimal AsJsonDecimal()
		{
			return (OracleJsonDecimal)this;
		}

		public OracleJsonDouble AsJsonDouble()
		{
			return (OracleJsonDouble)this;
		}

		public OracleJsonFloat AsJsonFloat()
		{
			return (OracleJsonFloat)this;
		}

		public OracleJsonNumber AsJsonNumber()
		{
			return (OracleJsonNumber)this;
		}

		public OracleJsonIntervalDS AsJsonIntervalDS()
		{
			return (OracleJsonIntervalDS)this;
		}

		public OracleJsonIntervalYM AsJsonIntervalYM()
		{
			return (OracleJsonIntervalYM)this;
		}

		public OracleJsonTimestamp AsJsonTimestamp()
		{
			return (OracleJsonTimestamp)this;
		}

		public OracleJsonDate AsJsonDate()
		{
			return (OracleJsonDate)this;
		}

		public OracleJsonBinary AsJsonBinary()
		{
			return (OracleJsonBinary)this;
		}
	}
}
